home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / sun4c.md / machMon.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  11KB  |  317 lines

  1. /*
  2.  * machMon.h --
  3.  *
  4.  *     Structures, constants and defines for access to the sun monitor.
  5.  *     These are translated from the sun monitor header file "openprom.h".
  6.  *
  7.  * Copyright (C) 1985 Regents of the University of California
  8.  * All rights reserved.
  9.  *
  10.  *
  11.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/sun4c.md/machMon.h,v 1.7 91/10/18 01:25:31 dlong Exp $ SPRITE (Berkeley)
  12.  */
  13.  
  14. #ifndef _MACHMON
  15. #define _MACHMON
  16.  
  17. /*
  18.  * The memory addresses for the PROM, and the EEPROM.
  19.  */
  20. #define SBUS_BASE    0xf8000000    /* physical */
  21. #define SBUS_SIZE    0x02000000
  22. #define OBIO_BASE    0xf0000000    /* physical */
  23.  
  24. /*
  25.  * The table entry that describes a device.  It exists in the PROM; a
  26.  * pointer to it is passed in MachMonBootParam.  It can be used to locate
  27.  * PROM subroutines for opening, reading, and writing the device.
  28.  *
  29.  * When using this interface, only one device can be open at once.
  30.  *
  31.  * NOTE: I am not sure what arguments boot, open, close, and strategy take.
  32.  * What is here is just translated verbatim from the sun monitor code.  We
  33.  * should figure this out eventually if we need it.
  34.  */
  35.  
  36. typedef struct {
  37.     char    devName[2];        /* The name of the device */
  38.     int    (*probe)();        /* probe() --> -1 or found controller
  39.                        number */
  40.     int    (*boot)();        /* boot(bp) --> -1 or start address */
  41.     int    (*open)();        /* open(iobp) --> -1 or 0 */
  42.     int    (*close)();        /* close(iobp) --> -1 or 0 */
  43.     int    (*strategy)();        /* strategy(iobp,rw) --> -1 or 0 */
  44.     char    *desc;            /* Printable string describing dev */
  45.     /* Sun4 has struct devinfo here.  Do I need it? */
  46. } MachMonBootTable;
  47.  
  48. /*
  49.  * Structure set up by the boot command to pass arguments to the program that
  50.  * is booted.
  51.  */
  52.  
  53. typedef struct {
  54.     char        *argPtr[8];    /* String arguments */
  55.     char        strings[100];    /* String table for string arguments */
  56.     char        devName[2];    /* Device name */
  57.     int        ctlrNum;    /* Controller number */
  58.     int        unitNum;    /* Unit number */
  59.     int        partNum;    /* Partition/file number */
  60.     char        *fileName;    /* File name, points into strings */
  61.     MachMonBootTable   *bootTable;    /* Points to table entry for device */
  62. } MachMonBootParam;
  63.  
  64. /*
  65.  * Memory layout stuff for the sun4c prom.
  66.  */
  67. typedef    struct    Mach_MemList {
  68.     struct        Mach_MemList    *next;
  69.     unsigned int    address;
  70.     unsigned int    size;
  71. } Mach_MemList;
  72.  
  73. typedef unsigned int MachMonIhandle;
  74. typedef unsigned int MachMonPhandle;
  75.  
  76. struct    config_ops {
  77.         int (*devr_next)(/* int nodeid */);
  78.         int (*devr_child)(/* int nodeid */);
  79.         int (*devr_getproplen)(/* int nodeid; caddr_t name; */);
  80.         int (*devr_getprop)(/* int nodeid; caddr_t name; addr_t value; */);
  81.         int (*devr_setprop)(/* int nodeid; caddr_t name; addr_t value; int len;
  82. */);
  83.         int (*devr_nextprop)(/* int nodeid; caddr_t previous; */);
  84. };
  85.  
  86. #define MACHMON_MAGIC    0x10010407
  87. /*
  88.  * Here is the structure of the vector table which is at the front of the boot
  89.  * rom.  The functions defined in here are explained below.  Fields marked
  90.  * with 01 are only valid with prom v_romvec_version less than 2.
  91.  */
  92.  
  93. typedef struct {
  94.     unsigned int    v_magic;      /* magic mushroom.  Should be
  95.                        * MACHMON_MAGIC. */
  96.     unsigned int          v_romvec_version; /* Version number of "romvec" */
  97.     unsigned int    v_plugin_version; /* Plugin Architecture version */
  98.     unsigned int    monId;          /* version # of monitor firmware */
  99.     Mach_MemList    **physMemory;      /* 01 total physical memory list */
  100.     Mach_MemList    **virtMemory;      /* 01 taken virtual memory list */
  101.     Mach_MemList    **availMemory;    /* 01 available physical memory */
  102.     struct config_ops    *v_config_ops;      /* dev_info configuration access */
  103.     /*
  104.      * storage device access facilities
  105.      */
  106.     char        **v_bootcommand;  /* 01 expanded with PROM defaults */
  107.     unsigned int    (*v_open)(/* 01 char *name */);
  108.     unsigned int    (*v_close)(/* 01 unsigned int fileid */);
  109.     /*
  110.      * block-oriented device access
  111.      */
  112.     unsigned int    (*v_read_blocks)();    /* 01 */
  113.     unsigned int    (*v_write_blocks)();    /* 01 */
  114.     /*
  115.      * network device access
  116.      */
  117.     unsigned int    (*v_xmit_packet)();    /* 01 */
  118.     unsigned int    (*v_poll_packet)();    /* 01 */
  119.     /*
  120.      * byte-oriented device access
  121.      */
  122.     unsigned int    (*v_read_bytes)();    /* 01 */
  123.     unsigned int    (*v_write_bytes)();    /* 01 */
  124.  
  125.     /*
  126.      * 'File' access - i.e.,  Tapes for byte devices.  TFTP for network devices
  127.      */
  128.     unsigned int     (*v_seek)();        /* 01 */
  129.     /*
  130.      * single character I/O
  131.      */
  132.     unsigned char    *inSource;       /* Current source of input */
  133.     unsigned char    *outSink;        /* Currrent output sink */
  134.     unsigned char    (*getChar)();    /* Get a character from input */ 
  135.     void        (*putChar)();    /* Put a character to output sink. */
  136.     int            (*mayGet)();     /* Maybe get a character, or "-1". */
  137.     int            (*mayPut)();     /* Maybe put a character, or "-1". */
  138.     /* 
  139.      * Frame buffer
  140.      */
  141.     void        (*fbWriteStr)();  /* write a string to framebuffer */
  142.     /*
  143.      * Miscellaneous Goodies
  144.      */
  145.     void        (*reBoot)();       /* reboot machine */
  146.     int            (*printf)();       /* handles fmt string plus 5 args */
  147.     void        (*abortEntry)();   /* Entry for keyboard abort. */
  148.     int         *nmiClock;       /* Counts in milliseconds. */
  149.     void        (*exitToMon)();/* Exit from user program. */
  150.     void        (**v_vector_cmd)();/* Handler for the vector */
  151.     void        (*v_interpret)();  /* interpret forth string */
  152.     MachMonBootParam    **bootParam;       /* 01 boot parameters. */
  153.  
  154.     unsigned int    (*v_mac_address)(/* int fd; caddr_t buf */);
  155.                     /* Copyout ether address */
  156.     char    **bootpath;        /* V2: Full path name of boot device */
  157.     char    **bootargs;        /* V2: Boot cmd line after dev spec */
  158.  
  159.     MachMonIhandle *op_stdin;        /* V2: Console input device */
  160.     MachMonIhandle *op_stdout;        /* V2: Console output device */
  161.  
  162.     MachMonPhandle (*op_phandle)(/* MachMonIhandle ihandle */);
  163.                     /* V2: Convert ihandle to phandle */
  164.  
  165.     char *    (*op_alloc)(/* caddr_t virthint, u_int size */);
  166.                     /* V2: Allocate physical memory */
  167.  
  168.     void    (*op_free)(/* caddr_t virt, u_int size */);
  169.                     /* V2: Deallocate physical memory */
  170.  
  171.     char *    (*op_map)(/* caddr_t virthint, u_int space, u_int phys,
  172.         u_int size */);        /* V2: Create device mapping */
  173.  
  174.     void    (*op_unmap)(/* caddr_t virt, u_int size */);
  175.                     /* V2: Destroy device mapping */
  176.  
  177.     MachMonIhandle (*op_open)(/* V2: char *name */);
  178.     int (*op_close)(/* V2: MachMonIhandle fileid */);
  179.     int (*op_read)(/* V2: MachMonIhandle fileid, caddr_t buf, u_int len */);
  180.     int (*op_write)(/* V2: MachMonIhandle fileid, caddr_t buf, u_int len */);
  181.     int (*op_seek)(/* V2: MachMonIhandle fileid, u_int offsh, u_int offsl */);
  182.     void    (*op_chain)(/* V2: caddr_t virt, u_int size, caddr_t entry,
  183.         caddr_t argaddr, u_int arglen */);
  184.     void    (*op_release)(/* V2: caddr_t virt, u_int size */);
  185.     int            *v_reserved[15];
  186.  
  187.     /*
  188.      * Beginning of machine-dependent portion.
  189.      */
  190.     void        (*SetSegInContext)();    /* set seg map in another
  191.                          * context without worrying
  192.                          * about whether it's mapped. */
  193. } MachMonRomVector;
  194.  
  195. /*
  196.  * Functions defined in the vector:
  197.  *
  198.  *
  199.  * getChar -- Return the next character from the input source
  200.  *
  201.  *     unsigned char getChar()
  202.  *
  203.  * putChar -- Write the given character to the output source.
  204.  *
  205.  *     void putChar(ch)
  206.  *       char ch;
  207.  *
  208.  * mayGet -- Maybe get a character from the current input source.  Return -1
  209.  *           if don't return a character.
  210.  *
  211.  *     int mayGet()
  212.  *
  213.  * mayPut -- Maybe put a character to the current output source.   Return -1
  214.  *           if no character output.
  215.  *
  216.  *    int  mayPut(ch)
  217.  *        char ch;
  218.  *
  219.  * fbWriteStr -- Write a string to the frame buffer.
  220.  *
  221.  *       void fwritestr(addr,len)
  222.  *          register unsigned char *addr;    / * String to be written * /
  223.  *          register short len;            / * Length of string * /
  224.  *
  225.  * printf -- Scaled down version of C library printf.  Only %d, %x, %s, and %c
  226.  *          are recognized.
  227.  *
  228.  * abortEntry -- Entry for keyboard abort.
  229.  *
  230.  *     void abortEntry()
  231.  *
  232.  * SetSegInContext(c, v, p)
  233.  *    context        c;
  234.  *    virtual addr    v;
  235.  *    pmeg_num    p;
  236.  */
  237.  
  238. /*
  239.  * For accessing the romVector.
  240.  */
  241.  
  242. extern MachMonRomVector    *machRomVectorPtr;
  243.  
  244. #define    romVectorPtr    machRomVectorPtr
  245.  
  246. /*
  247.  * Structures returned by PROM.
  248.  */
  249.  
  250. typedef struct {
  251.     int bustype;    /* 0 for mainmem, 1 for I/O, slot# for SBus devices */
  252.     char *addr;
  253.     unsigned int size;
  254. } MachDevReg;
  255.  
  256. typedef struct {
  257.     int pri, vec;
  258. } MachDevIntr;
  259.  
  260. /*
  261.  * Functions and defines to access the monitor.
  262.  */
  263.  
  264. #define Mach_MonPrintf (romVectorPtr->printf)
  265. #define Mach_MonGetChar (romVectorPtr->getChar)
  266.  
  267. /* from SunOS /usr/include/mon/sunromvec.h 1.19 */
  268. /*
  269.  * The possible values for "*romp->v_insource" and "*romp->v_outsink" are
  270.  * listed below.  These may be extended in the future.  Your program should
  271.  * cope with this gracefully (e.g. by continuing to vector through the ROM
  272.  * I/O routines if these are set in a way you don't understand).
  273.  */
  274. #define INKEYB    0 /* Input from parallel keyboard. */
  275. #define INUARTA   1 /* Input or output to Uart A.    */
  276. #define INUARTB   2 /* Input or output to Uart B.    */
  277. #define INUARTC   3 /* Input or output to Uart C.    */
  278. #define INUARTD   4 /* Input or output to Uart D.    */
  279. #define OUTSCREEN 0 /* Output to frame buffer.       */
  280. #define OUTUARTA  1 /* Input or output to Uart A.    */
  281. #define OUTUARTB  2 /* Input or output to Uart B.    */
  282. #define OUTUARTC  3 /* Input or output to Uart C.    */
  283. #define OUTUARTD  4 /* Input or output to Uart D.    */
  284. /* end of /usr/include/mon/sunromvec.h */
  285.  
  286. /* from SunOS /usr/include/mon/idprom.h 1.18 */
  287.  
  288. struct idprom {
  289.     unsigned char   id_format;      /* format identifier */
  290.     /* The following fields are valid only in format IDFORM_1. */
  291.     unsigned char   id_machine;     /* machine type */
  292.     unsigned char   id_ether[6];    /* ethernet address */
  293.     long            id_date;        /* date of manufacture */
  294.     unsigned        id_serial:24;   /* serial number */
  295.     unsigned char   id_xsum;        /* xor checksum */
  296.     unsigned char   id_undef[16];   /* undefined */
  297. };
  298.  
  299. #define IDFORM_1    1    /* Format number for first ID proms */
  300.  
  301. /* end of /usr/include/mon/idprom.h */
  302.  
  303.  
  304. extern    void     Mach_MonPutChar _ARGS_((int ch));
  305. extern    int      Mach_MonMayPut _ARGS_((int ch));
  306. extern    void    Mach_MonAbort _ARGS_((void));
  307. extern    void    Mach_MonReboot _ARGS_((char *rebootString));
  308. extern  void    Mach_MonTrap _ARGS_((Address address_to_trap_to));
  309. extern    void    Mach_MonStopNmi _ARGS_((void));
  310. extern    void    Mach_MonStartNmi _ARGS_((void));
  311. extern    void    Mach_MonTraverseDevTree _ARGS_((unsigned int node, int (*func)(), Address clientData));
  312. extern    int    Mach_MonSearchProm _ARGS_((char *name, char *attr, char *buf, int buflen));
  313. extern    void    Mach_MonTraverseAndPrintDevTree _ARGS_((void));
  314.  
  315.  
  316. #endif /* _MACHMON */
  317.